home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 April / EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso / EARCD / comm / term / term_47a_pch.lha / Source / term-4.7a / Call.c < prev    next >
C/C++ Source or Header  |  1996-11-02  |  5KB  |  251 lines

  1. /*
  2. **    Call.c
  3. **
  4. **    Call log file maintenance routines
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16.     /* Some local variables. */
  17.  
  18. STATIC BPTR                CallFile;
  19. STATIC struct timeval    CallTime;
  20. STATIC PhoneLogHandle *    LogHandle;
  21. STATIC BOOL                CallActive;
  22.  
  23.     /* InitPhoneLogEntry(struct PhoneLogEntry *Item,STRPTR Number,STRPTR Name):
  24.      *
  25.      *    Initialize a log entry for the PhoneLog support routines.
  26.      */
  27.  
  28. STATIC VOID
  29. InitPhoneLogEntry(struct PhoneLogEntry *Item,STRPTR Name,STRPTR Number,LONG BackTime)
  30. {
  31.     struct ClockData ClockData;
  32.     struct timeval Now;
  33.  
  34.     GetSysTime(&Now);
  35.     Amiga2Date(Now.tv_secs - BackTime,&ClockData);
  36.  
  37.     memset(Item,0,sizeof(struct PhoneLogEntry));
  38.  
  39.     if(Number)
  40.     {
  41.         LimitedStrcpy(sizeof(Item->Number),Item->Number,Number);
  42.  
  43.         if(Number == Name)
  44.             Name = "???";
  45.     }
  46.  
  47.     if(Name)
  48.         LimitedStrcpy(sizeof(Item->Name),Item->Name,Name);
  49.  
  50.     strcpy(Item->Reason,"-");
  51.  
  52.     strcpy(Item->ProgramName,"term");
  53.  
  54.     Item->ProgramVersion    = TermVersion;
  55.     Item->ProgramRevision    = TermRevision;
  56.  
  57.     Item->StartDay        = ClockData.mday;
  58.     Item->StartMonth    = ClockData.month;
  59.     Item->StartYear        = ClockData.year;
  60.     Item->StartHour        = ClockData.hour;
  61.     Item->StartMin        = ClockData.min;
  62.     Item->StartSec        = ClockData.sec;
  63.  
  64.     Item->EndDay        = ClockData.mday;
  65.     Item->EndMonth        = ClockData.month;
  66.     Item->EndYear        = ClockData.year;
  67.     Item->EndHour        = ClockData.hour;
  68.     Item->EndMin        = ClockData.min;
  69.     Item->EndSec        = ClockData.sec;
  70. }
  71.  
  72.     /* CallDate():
  73.      *
  74.      *    Add the current date and time to the logfile.
  75.      */
  76.  
  77. STATIC VOID
  78. CallDate(LONG Seconds,BPTR FileHandle)
  79. {
  80.         /* Days of the week. */
  81.  
  82.     STATIC STRPTR CallDays[7] =
  83.     {
  84.         "Sun","Mon","Tue","Wed","Thu","Fri","Sat"
  85.     };
  86.  
  87.         /* Months of the year. */
  88.  
  89.     STATIC STRPTR CallMonths[12] =
  90.     {
  91.         "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
  92.     };
  93.  
  94.     struct ClockData ClockData;
  95.  
  96.         /* Convert time and date. */
  97.  
  98.     Amiga2Date(Seconds,&ClockData);
  99.  
  100.         /* Add the date line. */
  101.  
  102.     FPrintf(FileHandle,"%s %s %02ld %02ld:%02ld:%02ld %ld\n",CallDays[ClockData.wday],CallMonths[ClockData.month - 1],ClockData.mday,ClockData.hour,ClockData.min,ClockData.sec,ClockData.year);
  103. }
  104.  
  105.     /* MakeCall(struct PhoneEntry *Entry):
  106.      *
  107.      *    Register a new phone call.
  108.      */
  109.  
  110. VOID
  111. MakeCall(STRPTR Name,STRPTR Number,LONG BackTime)
  112. {
  113.         /* End previous entry. */
  114.  
  115.     if(CallActive)
  116.         StopCall(FALSE);
  117.  
  118.         /* Get current system time. */
  119.  
  120.     GetSysTime(&CallTime);
  121.     CallTime.tv_secs -= BackTime;
  122.  
  123.         /* Call logging enabled? */
  124.  
  125.     if(Config->CaptureConfig->LogCall && Config->CaptureConfig->CallLogFileName[0])
  126.     {
  127.         if(Config->CaptureConfig->LogFileFormat == LOGFILEFORMAT_CallInfo)
  128.         {
  129.                 /* Open logfile for writing. */
  130.  
  131.             if(CallFile = OpenToAppend(Config->CaptureConfig->CallLogFileName,NULL))
  132.             {
  133.                     /* Add the title line. */
  134.  
  135.                 FPrintf(CallFile,"%s (%s)\n--------------------------------\nLogin:  ",Name,Number);
  136.  
  137.                     /* Make the line complete. */
  138.  
  139.                 CallDate(CallTime.tv_secs,CallFile);
  140.  
  141.                 CallActive = TRUE;
  142.             }
  143.         }
  144.         else
  145.         {
  146.                 /* Open the log file */
  147.  
  148.             if(LogHandle = OpenPhoneLog(Config->CaptureConfig->CallLogFileName))
  149.             {
  150.                 struct PhoneLogEntry Item;
  151.  
  152.                     /* Set up a log entry */
  153.  
  154.                 InitPhoneLogEntry(&Item,Name,Number,BackTime);
  155.  
  156.                     /* And write it */
  157.  
  158.                 WritePhoneLogStartEntry(LogHandle,&Item);
  159.  
  160.                 CallActive = TRUE;
  161.             }
  162.         }
  163.     }
  164. }
  165.  
  166.     /* StopCall(BOOLEAN Finish):
  167.      *
  168.      *    End the current phone call.
  169.      */
  170.  
  171. VOID
  172. StopCall(BOOL Finish)
  173. {
  174.     UBYTE LocalBuffer[MAX_FILENAME_LENGTH];
  175.     BOOL GotName = FALSE;
  176.  
  177.         /* Is a call currently being made? */
  178.  
  179.     if(CallFile)
  180.     {
  181.         struct timeval StopTime;
  182.         LONG Seconds;
  183.  
  184.             /* Get current system time. */
  185.  
  186.         GetSysTime(&StopTime);
  187.         Seconds = StopTime.tv_secs;
  188.  
  189.             /* Subtract the starting time from it. */
  190.  
  191.         SubTime(&StopTime,&CallTime);
  192.  
  193.             /* Add the info line. */
  194.  
  195.         if(Finish)
  196.             FPrintf(CallFile,"*** term exited before logout: ");
  197.         else
  198.             FPrintf(CallFile,"Logout: ");
  199.  
  200.             /* Make the line complete. */
  201.  
  202.         CallDate(Seconds,CallFile);
  203.  
  204.             /* Get the file name. */
  205.  
  206.         GotName = NameFromFH(CallFile,LocalBuffer,sizeof(LocalBuffer));
  207.  
  208.             /* Add the online time. */
  209.  
  210.         FPrintf(CallFile,"Time online: %02ld:%02ld:%02ld\n\n",(StopTime.tv_secs % 86400) / 3600,(StopTime.tv_secs % 3600) / 60,StopTime.tv_secs % 60);
  211.  
  212.             /* Finis... */
  213.  
  214.         Close(CallFile);
  215.         CallFile = NULL;
  216.     }
  217.  
  218.         /* Now what about the PhoneLog file? */
  219.  
  220.     if(LogHandle)
  221.     {
  222.         struct PhoneLogEntry Item;
  223.  
  224.             /* Get the file name. */
  225.  
  226.         GotName = NameFromFH(LogHandle->file,LocalBuffer,sizeof(LocalBuffer));
  227.  
  228.         InitPhoneLogEntry(&Item,NULL,NULL,0);
  229.  
  230.         WritePhoneLogEndEntry(LogHandle,&Item);
  231.         ClosePhoneLog(LogHandle);
  232.  
  233.         LogHandle = NULL;
  234.     }
  235.  
  236.  
  237.         /* Clear the `executable' bit. */
  238.  
  239.     if(GotName)
  240.     {
  241.         AddProtection(LocalBuffer,FIBF_EXECUTE);
  242.  
  243.         if(Config->MiscConfig->CreateIcons)
  244.             AddIcon(LocalBuffer,FILETYPE_TEXT,TRUE);
  245.     }
  246.  
  247.         /* No call is active now */
  248.  
  249.     CallActive = FALSE;
  250. }
  251.